package project.innovation.mooddiagnosis.service.impl;

import com.google.gson.Gson;
import org.python.google.common.reflect.TypeToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import project.innovation.mooddiagnosis.dao.RecordMapper;
import project.innovation.mooddiagnosis.dao.ScaleRecordMapper;
import project.innovation.mooddiagnosis.dto.result.ScaleRequest;
import project.innovation.mooddiagnosis.entity.image.ImageInfo;
import project.innovation.mooddiagnosis.entity.records.RecordInfo;
import project.innovation.mooddiagnosis.entity.scaleScore.ScaleScore;
import project.innovation.mooddiagnosis.service.ResultService;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

@Service
public class ResultServiceImpl implements ResultService {
    @Autowired
    private RecordMapper recordMapper;
    @Autowired
    private ScaleRecordMapper scaleRecordMapper;
    @Value("${ImageFolderPath}")
    private String imageFolderPath;

    private static final Logger logger = LoggerFactory.getLogger(ResultServiceImpl.class);

    private final String[] evaluationConclusion={
            "风险因素和保护因素共同影响青少年的攻击行为。风险因素是指那些可能增加青少年攻击行为的可能性的因素，如暴力暴露；保护因素是指那些可能减少青少年攻击行为的可能性的因素，如与成年人的亲密关系、自尊等。\n" +
                    "对于女性青少年来说，低水平的暴力暴露并不会导致攻击行为的增加，反而可能激发女性青少年的应对能力，从而减少攻击行为的发生；并且多个保护因素的综合作用可以进一步减弱暴力暴露对攻击行为的影响。\n" +
                    "而对于男性青少年来说，暴力暴露与攻击行为之间存在直接的线性关系。即暴力暴露的增加会导致攻击行为的增加。保护因素（如与成年人的亲密关系、宗教的重要性、自尊等）对男性青少年的攻击行为没有显著的保护作用。",
            "共情包含认知共情和情绪共情，前者帮助未成年人在冲突情境中采取非暴力方式解决问题，减少攻击性行为；后者使他们感受到他人的痛苦，从而避免给他人带来伤害。\n" +
                    "共情能力还能增强未成年人的社会适应能力，促进良好人际关系的建立，获得社会支持，降低因情绪问题导致的犯罪行为，并提高他们的沟通和冲突解决技巧。\n" +
                    "对于已经犯罪的未成年人，共情能力的培养是心理矫治的重要内容，这有助于他们认识到自己行为对他人造成的伤害，减少再犯的可能性。同时，共情能力强的未成年人在回归社会后，更容易获得他人的理解和支持，减少社会排斥感，降低再犯的风险。",
            "戒备心理由于会阻碍矫治工作开展并影响未成年人社会融入，被列为第八位风险因素。研究表明，戒备心理与心理韧性存在相关关系。心理韧性是青少年应对压力、创伤和逆境的关键能力。高心理韧性可减少焦虑、抑郁等负面情绪，从而降低因不安全感产生的戒备心理18。其作用机理可推测为心理韧性与家庭支持（如父亲存在感）、社会支持、情绪智力等密切相关。例如，父亲存在感强的青少年表现出更高的心理安全感和韧性19。同伴支持联合家庭关怀可显著减少负性情绪，增强心理韧性，提高生活质量。研究表明，同伴支持能降低抑郁和焦虑水平，而家庭关怀进一步强化这一效果。通过建立主动寻求和有效接收社会支持的双因素模型，有助于青少年建立信任感，减少孤立感和戒备心理。",
            "说谎行为虽然不会直接造成严重伤害，但会损害信任关系并阻碍矫治工作顺利开展，因此被列为第十位风险因素。研究证实，说谎行为与心理韧性、乐观和自我效能感存在相关关系。证据显示，乐观主义与心理韧性、自我效能感等积极品质呈显著正相关，这些品质共同促进个体的适应性应对策略，从而减少逃避或欺骗行为。研究发现，青少年职业使命感通过乐观主义的中介作用提升心理幸福感，而心理幸福感高的个体更倾向于保持诚实。此外，教育中嵌入乐观主义培养（如社会情感学习课程）可增强学生的情绪调节能力和诚信意识。",
            "自尊是个体对自我的主观评价，反映个体对自己的喜爱程度，由能力和价值两个维度构成。高自尊的未成年人更易接纳自己，面对压力和挫折时能积极应对，减少反社会行为和物质滥用。他们能更好地与他人建立良好关系，获得社会支持，从而降低因缺乏支持而犯罪的风险。\n" +
                    "此外，高自尊的未成年人在学业和职业上更具优势，良好的学业成绩和职业发展能增强他们的自信心和社会地位，减少因经济困难和社会排斥导致的犯罪行为。",
            "自控能力弱由于会导致冲动行为并增加违法犯罪风险，被列为第五位风险因素。研究证实，自控能力与心理韧性、乐观和自我效能感均形成相关关系。研究发现，心理韧性与自我控制能力呈显著正相关，高中生中心理韧性水平较高的学生表现出更强的自我控制能力，尤其在应对学习压力和睡前诱惑时更为有效。\n" +
                    "而乐观主义与行为自我控制直接相关。例如，在初中生中，乐观主义水平高的学生更倾向于“行动前思考”“等待想要的东西”等自我控制行为。乐观主义通过改善睡眠质量和降低压力水平，间接减少焦虑、抑郁等负面情绪，从而为自我控制创造更好的心理条件。",
            "价值观扭曲由于可能导致未成年人对违法犯罪行为的错误认知并降低道德约束力，被列为第七位风险因素。研究证实，价值观与乐观之间有紧密关联。Yue和Gao 的研究表明，自尊、自信、理性、沉着以及积极乐观的社会心态对人生价值目标、人生价值过程和人生价值评价存在重要影响。研究进一步显示，高积极品质的个体更倾向于采用积极应对策略，减少消极情绪，从而形成更健康的价值观体系",
            "社会支持主要有情感支持、物质支持、信息支持和陪伴支持四个维度。\n" +
                    "情感支持能够缓解他们的负面情绪，如恐惧、焦虑和自责，同时增强自尊和自信，让他们感受到被理解和接纳。\n" +
                    "物质支持确保他们有基本的生活保障，减轻经济压力，使他们能专注于个人发展和行为矫正。\n" +
                    "信息支持通过提供法律知识和行为指导，帮助他们理解自身行为的后果，做出更明智的选择。\n" +
                    "陪伴支持，如亲情和朋辈的支持，能让他们在面对困难时有依靠，减少孤独感，增强社会归属感。",
            "非自杀性自伤倾向虽不具有立即的生命危险，但表明未成年人存在严重心理问题且可能随时转化为自杀行为，因此被列为第三优先级。研究显示，非自杀性自伤与心理韧性、尽责性形成负相关关系。有研究显示，NSSI 高风险组中学生呈现出低自尊、较弱的心理韧性、习惯责难自我及他人（消极认知情绪调节）和受负面生活事件影响较大的特征，而低风险组中学生的风险因素综合水平较低。提示低自尊、低心理韧性、采取消极的情绪调节策略及受负性生活事件影响较大的中学生更容易发生NSSI 行为。同样的，也提醒自尊、心理韧性对于非自杀性自伤存在重要的影响8。同样的，尽责性人格特质与NSSI 检出率呈负相关，即尽责性越高的个体，自伤风险越低。这可能与尽责性个体更倾向于规划行为、遵守规则以及更强的责任感有关9。",
            "自杀倾向由于直接威胁未成年人生命安全，被列为最高优先级风险因素。我们发现心理韧性与乐观对自杀倾向具有显著对冲作用。有研究显示，乐观主义能够显著降低自杀倾向。乐观主义是对未来积极事件的稳定预期，能有效缓冲压力事件的影响，降低自杀风险。大学生群体的研究表明，乐观特质通过提升自尊（中介作用）减弱负性生活事件与自杀风险的联系4。心理韧性助个体在逆境中保持目标导向，增强生存意愿，高心理韧性者能更好地应对压力，避免陷入绝望，家庭亲密度通过提高心理韧性降低研究生的自杀倾向，并与积极应对方式是一种交互作用关系。\n" +
                    "同时，乐观主义能够显著降低自杀倾向。乐观主义是对未来积极事件的稳定预期，能有效缓冲压力事件的影响，降低自杀风险。大学生群体的研究表明，乐观特质通过提升自尊（中介作用）减弱负性生活事件与自杀风险的联系。\n",
            "情绪调控能力差由于常导致冲动行为并与暴力、自伤等问题密切相关，被列为第六位风险因素。研究显示，情绪调控能力与心理韧性形成显著正相关关系。研究显示，心理韧性高的人能在负面情绪（如愤怒、悲伤）中同时体验积极情绪（如感恩、兴趣），从而更快恢复14。雷琴婷针对中小学教师的研究发现，心理韧性包含“情绪稳定性”这一内部保护因子。情绪稳定性高的教师能更理性地处理教学压力，减少情绪波动对工作的负面影响15。黄维肖对空巢老人的研究进一步验证，心理韧性水平较高的老人更少出现焦虑、抑郁等情绪问题，其情绪管理能力与韧性总分显著正相关。",
            "变态心理问题由于常与严重犯罪行为相关，被列为第四位高风险因素。研究表明，变态心理与心理韧性、自我效能感有潜在关系。从心理学视角来看，变态心理（AbnormalPsychology）是一个多维度的概念，涉及异常心理现象的界定、分类、成因及干预方法。主要研究异常心理现象，包括个体在认知、情绪、行为等方面的显著偏离常态（如幻觉、强迫行为、情感淡漠等），以及由此导致的社会功能损害。而就某些品质的提升对于变态心理的影响角度，在罪错未成年之中，由文献与具体访谈可得，他们存在的变态心理多为反社会人格障碍（ASPD）、抑郁障碍、睡眠障碍、进食障碍等。有研究显示，ASPD 患者在心理韧性量表（RSA）的多个子维度（如未来感知、家庭凝聚力、社交资源）及总分上显著低于健康对照组，同时伴随更高的抑郁、焦虑和躯体化症状。这表明心理韧性不足可能是ASPD 患者情绪和行为问题的潜在机制之一10。除此之外，自我效能感也被推测在ASPD 中起着效果。尽管未直接研究ASPD，但自我效能感与道德判断和冲动控制相关。例如，体育锻炼通过提升留守儿童的自尊和自我效能感，减少攻击性行为，提示其在反社会倾向中的潜在抑制作用。这一发现表明，反社会人格倾向等严重心理问题虽难以短期消除，但通过强化自我效能感和心理韧性，可显著降低其转化为犯罪行为的可能性。这为传统精神医学干预提供了补充路径，体现了RARS 模型中优势培养与风险控制的协同效应。",
            "思路体现了RARS 模型中\"风险\"与\"支持\"的动态平衡。\n" +
                    "负向认知偏差由于可能导致抑郁、焦虑等情绪问题并加剧社会适应困难，被列为第九位风险因素。研究显示，负向认知偏差与批判性思维、开放心态形成对冲关系。研究表明，风险感知（对行为后果的理性评估能力）能够显著负向影响闯红灯行为，并部分中介认知偏差的作用。这意味着提升个体对风险的敏感性和评估能力（如通过安全教育或案例模拟），可以帮助抑制由认知偏差（如过度自信、归因偏差）引发的非理性行为。例如，增强行人闯红灯时的风险意识，可降低其代表性偏差（认为事故不会发生在自己身上）的影响21。边家胜通过技术支持的日语学习案例发现，构建“学习与发展共同体”并结合教学干预（如多角度讨论、反思性学习）能有效纠正学习者的偏差认知。这提示，培养批判性思维（质疑固有观念）和开放心态（接纳新信息）是降低负向认知偏差的关键积极品质22。"
    };

    private final String[] precautions={
            "一、增强保护因素\n" +
                    "①与成年人建立亲密关系：鼓励青少年与至少一名信任的成年人建立紧密联系，提供情感支持和指导。可在家庭教育指导工作站提供亲子团辅；学校和社区可以组织导师计划，为青少年提供一对一的指导和支持。\n" +
                    "②提高自尊和自我效能感：通过教育和心理辅导，帮助青少年建立高自尊和自我效能感，增强他们应对压力的能力。学校可以开展自尊教育课程，提供有效的心理咨询服务。\n" +
                    "③培养社交技能和关系能力：培养青少年的社交技能，如良好的沟通、冲突解决和情绪管理能力，帮助他们在面对暴力时能够采取建设性的方式应对。学校可以开设社交技能训练课程，组织团队合作活动。\n" +
                    "二、减少风险因素\n" +
                    "①家庭环境：家长应避免在孩子面前使用暴力，创造一个安全、支持性的家庭环境。家庭治疗和亲子教育课程可以帮助家长改善育儿方式。\n" +
                    "②社区环境：社区应减少暴力和犯罪行为的发生，提供安全的公共空间和活动。社区可以开展反暴力宣传活动，组织青少年参与社区服务。\n" +
                    "③学校环境：学校应采取措施减少校园暴力，如实施反欺凌计划、提供心理健康教育和冲突解决培训。学校可以设立安全热线，鼓励学生报告暴力行为。\n" +
                    "特别需要指出的是，对于女性青少年可以更多地强调社交支持和心理韧性的发展。而由于男性青少年对暴力暴露更为敏感，干预措施应着重于情绪管理和行为控制的训练。",
            "一、家庭矫治方案\n" +
                    "①减少父亲拒绝\n" +
                    "父亲应积极参与孩子的日常生活，提供情感支持，避免冷漠和拒绝的态度。例如，父亲可以每周至少安排一次与孩子单独相处的时间，进行亲子活动，如一起运动、阅读或进行手工制作等，增进父子关系。\n" +
                    "②避免过度保护\n" +
                    "父母应鼓励孩子独立解决问题，培养自主性和责任感。例如，可以让孩子参与家庭决策，如选择家庭活动、安排家务分工等，让孩子感受到自己的意见被重视，同时锻炼他们的决策能力和责任感。\n" +
                    "二、共情能力训练\n" +
                    "①认知共情训练\n" +
                    "通过认知行为疗法，帮助未成年人识别和挑战负面思维模式，学会从他人的角度思考问题，理解他人的想法和感受。\n" +
                    "②情绪共情训练\n" +
                    "教授未成年人识别和表达自己的情绪，同时学会识别他人的情绪反应，增强对他人情绪的敏感性。通过情绪调节训练，帮助未成年人学会在面对他人情绪时保持冷静，避免冲动行为，提高情绪共情能力。",
            "对于怀有强烈戒备心理的罪错未成年人，矫治首要任务是建立信任关系，通过稳定、可预测的环境和人际互动，降低戒备反应并培养基本信任感。这种干预思路体现了RARS 模型中\"风险\"与\"支持\"的动态平衡。",
            "心理韧性帮助个体在面对压力或诱惑时保持稳定行为，减少因脆弱性或冲动引发的说谎。证据表明，心理韧性与积极应对策略（如问题导向应对）显著相关，而消极应对策略（如逃避）与说谎行为正相关。中国大学生的心理健康状况与心理韧性高度相关，高心理韧性者更少出现因压力或自我怀疑导致的诚信问题27。R-A 矩阵分析表明，说谎行为往往源于对后果的恐惧或自我保护需求。因此，矫治重点不应仅是惩罚说谎，而是通过培养自我效能感和心理韧性，建立\"敢于承担责任\"的内在机制。这种转变体现了RARS 理论中\"响应性\"与\"社会化\"维度的实践应用。",
            "①正念训练\n" +
                    "正念训练是一种有效的心理干预方法，能够帮助青少年提高自尊水平。正念训练通过引导青少年关注当下，接纳自己的感受和想法，减少自我批判，从而增强自尊。例如，通过正念冥想、正念呼吸练习等，帮助青少年学会在面对负面情绪时保持冷静和接纳的态度，而不是陷入自我否定的循环。研究表明，正念训练能够显著提高青少年的自尊水平，减少情绪问题和行为问题。\n" +
                    "②心理教育\n" +
                    "通过系统的教育和训练，帮助青少年了解自尊的重要性，学习提升自尊的方法。例如，通过心理讲座、团体辅导等形式，向青少年传授自尊的相关理论知识，帮助他们认识到自尊对心理健康和行为发展的影响。同时，通过互动活动和实践练习，让青少年在实际操作中提升自尊水平。研究表明，心理教育能够有效提高青少年的自尊水平，增强他们的心理韧性。",
            "（六）自我控制能力较差 \n" +
                    "预防方案12：认知与行为训练\n" +
                    "【目标人群】\n" +
                    "冲动控制能力较差的青少年。\n" +
                    "【干预目的】\n" +
                    "提升自我控制能力，减少冲动行为。\n" +
                    "【实施方案】\n" +
                    "1、冲动管理技巧培训\n" +
                    "教授延迟病是的方法，如此对吸或离开冲突场景以冷静思考。技励参与者设定明确的目标，并制定实现目标的计划。\n" +
                    "2、情绪调节训练\n" +
                    "使用情绪温度计基助参与者识别和调节自己的情绪状态、学习结绪调节荣略，如认知重评和问题解决。\n" +
                    "3、目标设定与监控活动\n" +
                    "帮助参与者设定具体可行的目标，并定期检查进展情况。使用奖励机制，鼓励参与者坚持完成目标自我控制干预：自我控制干预包括努力暴露、奖励售房、奖励捆售、强化时闽表、冲动控制训练和正念调练。\n" +
                    "4、自我控制干预\n" +
                    "末成年人警装行为个别化整块商导于层\n",
            "针对持有反社会价值观的罪错未成年人，传统矫治往往采用说教方式，效果有限。而基于R-A 矩阵的发现，通过培养积极归因风格和未来展望能力，可以间接促进价值观重塑。这种\"先情感，后认知\"的干预路径是对传统价值观教育的创新补充。",
            "一、情感支持\n" +
                    "①建立信任关系\n" +
                    "社会工作者应通过定期面谈、电话回访等方式，与涉罪未成年人及其家人建立信任关系，营造支持氛围。\n" +
                    "②心理教育\n" +
                    "提供针对性的心理疏导服务，帮助涉罪未成年人缓解负面情绪，增强心理韧性。可以通过个体心理咨询、小组心理辅导等形式进行\n" +
                    "③亲情教育\n" +
                    "开展亲情教育活动，如家庭沟通工作坊、亲子互动游戏等，增强亲子之间的理解和互动，修复亲子关系。\n" +
                    "二、信息支持\n" +
                    "①知识普及\n" +
                    "通过讲座、案例分析等形式，普及法律、心理知识，增强涉罪未成年人的法律意识，帮助他们理解自身行为。\n" +
                    "三、陪伴支持\n" +
                    "①朋辈支持\n" +
                    "搭建朋辈支持平台，如组织涉罪未成年人参加社区活动、志愿者服务等，增加他们与同龄人的互动，增强朋辈支持。\n" +
                    "②教师支持通过定期沟通、个别辅导等形式，帮助他们在学校中获得更多的关注和帮助。",
            "基于此，矫治方案设计应注重个体责任感和目标导向培养，让罪错未成年人通过完成有意义的任务获得成就感，从而转化自伤行为背后的情绪宣泄需求。",
            "矫治实践中，应首先建立专门的安全保护机制，同时通过韧性培养和积极心理学干预技术，如\"希望三部曲\"训练，强化其面对挫折的心理缓冲能力。这不同于传统干预中仅关注风险控制的单一思路，而是同步激活内在优势资源，实现双向调节。",
            "力与韧性总分显著正相关16。\n" +
                    "基于这些发现，我们开发的\"情绪导航仪\"课程通过生理反馈、认知重建和放松训练等技术，帮助罪错未成年人识别、接纳和调节负面情绪，培养\"情绪韧性\"。这一干预设计体现了RARS 模型中\"响应性\"维度的个性化原则。",
            "「阶梯式成长计划」操作手册\n" +
                    "核心工具包**\n" +
                    "- 情绪温度计（自制5级评分表）  \n" +
                    "- 进步存折（盖章积分本）  \n" +
                    "- 任务挑战卡（分绿/蓝/金三级）  \n" +
                    "- 团体沙盘（可用乐高积木替代）  \n" +
                    "阶段一：安全联结（第1-4周）\n" +
                    "目标：建立基本信任，识别触发点  \n" +
                    "操作流程：  \n" +
                    "1. 每日签到（5分钟）  \n" +
                    "   - 使用\"情绪温度计\"标记当日状态（1=平静，5=失控）  \n" +
                    "   - 在日历上贴对应颜色贴纸（蓝→绿→黄→橙→红）  \n" +
                    "\n" +
                    "2. 周三团体活动（60分钟/次）  \n" +
                    "   - 沙盘剧场：用积木搭建\"最让我生气的情景\"  \n" +
                    "   - 角色反转：轮流扮演\"挑衅者\"和\"调解员\"  \n" +
                    "   - 逃生通道设计：集体讨论3种离开冲突现场的方法  \n" +
                    "\n" +
                    "3. 周末微挑战  \n" +
                    "   - 第1周：完成1次超市自主结账  \n" +
                    "   - 第2周：教长辈使用1个手机功能  \n" +
                    "   - 第3周：记录3个路人的友善举动  \n" +
                    "   - 第4周：为社区绘制安全地图  \n" +
                    "阶段二：能力重塑（第5-8周）\n" +
                    "目标：积累成功体验，增强自我效能  \n" +
                    "操作流程：  \n" +
                    "1. 个人任务系统  \n" +
                    "   领取\"挑战卡\"（示例）：  \n" +
                    "     - 绿卡：每天整理床铺（连续3天→1积分）  \n" +
                    "     - 蓝卡：策划周末家庭菜单（完成→3积分）  \n" +
                    "     - 金卡：组织3人以上集体活动（完成→5积分）  \n" +
                    "\n" +
                    "2. 周四技能工坊（90分钟/次）  \n" +
                    "   身体控制训练：  \n" +
                    "     - 呼吸调节（吹乒乓球过障碍赛）  \n" +
                    "     - 力量释放（捶打沙包时同步倒数10秒）  \n" +
                    "   现实问题解决：  \n" +
                    "     - 模拟\"被冤枉偷窃\"场景应对演练  \n" +
                    "     - 设计\"愤怒急救包\"（内含耳机、薄荷糖等自选物品）  \n" +
                    "\n" +
                    "3. 积分兑换系统\n" +
                    "   - 20分：兑换1次优先活动选择权  \n" +
                    "   - 50分：兑换团体外出日（需安全评估）  \n" +
                    "阶段三：社会连接（第9-12周）**\n" +
                    "目标：重建社会支持，巩固改变  \n" +
                    "操作流程：  \n" +
                    "1. 同伴支持计划  \n" +
                    "   - 组建\"成长联盟\"（3人小组）  \n" +
                    "   - 轮流担任\"值班观察员\"，记录组员进步事件  \n" +
                    "\n" +
                    "2. 周二社区实践  \n" +
                    "   - 第9周：协助整理社区图书馆  \n" +
                    "   - 第10周：采访便利店店员工作日常  \n" +
                    "   - 第11周：设计反校园暴力宣传单页  \n" +
                    "   - 第12周：策划感恩餐会（邀请至少1位支持者）  \n" +
                    "\n" +
                    "3. 成果可视化  \n" +
                    "   - 制作\"蜕变时间轴\"：标注12周关键突破点  \n" +
                    "   - 拍摄\"我的安全空间\"解说视频（用手机即可）  ",
            "针对认知扭曲现象，传统认知行为疗法多聚焦于识别和挑战错误思维。R-A矩阵则选择了更积极的路径：通过培养批判性思维和开放心态，引导罪错未成年人主动质疑自己的消极假设，扩展思维边界。"
    };

    @Override
    public Integer addRecord(RecordInfo record){
         return recordMapper.insert(record);
    }

    @Override
    public List<RecordInfo> selectRecordsByUserId(String userId){
        List<RecordInfo> list = recordMapper.selectRecordListByUserId(userId);
        return list;
    }

    @Override
    public int deleteRecordById(Integer id){
        return recordMapper.deleteByPrimaryKey(id);
    }

    @Override
    public List<ImageInfo> selectImagesByVideoId(String videoId) throws FileNotFoundException {
        Gson gson = new Gson();
        Type type = new TypeToken<Map<String, Map<String, Object>>>() {}.getType();

        List<ImageInfo> ret = new LinkedList<ImageInfo>();
        try(FileReader reader = new FileReader(imageFolderPath + videoId+".json")) {
            Map<String, Map<String, Object>> map = gson.fromJson(reader, type);
            for(Map.Entry<String, Map<String, Object>> entry : map.entrySet()) {
                String au = entry.getKey();
                Map<String, Object> details = entry.getValue();
                String au_descriptions = details.get("description").toString();
                Integer au_count = Integer.parseInt(details.get("count").toString());
                String image_url = au + "_"+videoId+".jpg";
                ImageInfo imageInfo = new ImageInfo(image_url, au_descriptions, au_count);
                ret.add(imageInfo);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return ret;
    }

    @Override
    public ScaleScore calculateScaleScore(ScaleRequest request) {
        ScaleScore result = new ScaleScore();
        result.setUserId(request.getUserId());

        List<Integer> scores = request.getScores();
        logger.info("request: userId {}, scores {}",scores, request.getUserId());
        Integer violence = scores.get(1) + scores.get(2) + scores.get(5) + scores.get(13)
                + scores.get(15) + scores.get(32) + scores.get(35);
        result.setViolence(violence);
        Integer empathy = scores.get(3) + scores.get(6) + scores.get(7) + reverseScore(scores.get(8))
                + scores.get(31) ;
        result.setEmpathy(empathy);
        Integer alert = scores.get(4) + scores.get(9) + scores.get(11) + scores.get(14)
                + scores.get(20) + scores.get(23) + scores.get(24);
        result.setAlert(alert);
        Integer lie = scores.get(12) + scores.get(17) + reverseScore(scores.get(21)) + scores.get(25)
                + scores.get(27) + scores.get(28) + scores.get(35) + reverseScore(scores.get(36));
        result.setLie(lie);
        Integer prosocial = scores.get(10) + scores.get(16) + scores.get(18) + scores.get(33)
                + scores.get(38) + scores.get(41) + scores.get(42) + reverseScore(scores.get(43));
        result.setProsocial(prosocial);
        Integer selfEsteem = reverseScore(scores.get(19)) + scores.get(22) + reverseScore(scores.get(26))+ scores.get(30)
                + scores.get(44) + scores.get(47);
        result.setSelfEsteem(selfEsteem);
        Integer selfControl = scores.get(29) + scores.get(37) + scores.get(39) + reverseScore(scores.get(40))
                + scores.get(45) + reverseScore(scores.get(46)) + reverseScore(scores.get(48));
        result.setSelfControl(selfControl);
        Integer values = scores.get(60) + scores.get(68) + reverseScore(scores.get(75)) + scores.get(84)
                + scores.get(85) + reverseScore(scores.get(55));
        result.setValues(values);
        Integer socialSupport = reverseScore(scores.get(52)) + reverseScore(scores.get(70)) + scores.get(76) + scores.get(50)
                + scores.get(78) + scores.get(67);
        result.setSocialSupport(socialSupport);
        Integer nonsuicidalSelfInjury = scores.get(51) + scores.get(62) + scores.get(77) + scores.get(79)
                + scores.get(90);
        result.setNonsuicidalSelfInjury(nonsuicidalSelfInjury);
        Integer suicidalTendency = scores.get(57) + scores.get(61) + scores.get(69) + reverseScore(scores.get(71))
                + scores.get(87) + scores.get(89);
        result.setSuicidalTendency(suicidalTendency);
        Integer emotionRegulation = scores.get(63) + scores.get(66) + scores.get(81) + scores.get(82)
                + reverseScore(scores.get(56)) + reverseScore(scores.get(72)) + reverseScore(scores.get(88));
        result.setEmotionRegulation(emotionRegulation);
        Integer abnormalPsychology = scores.get(53) + scores.get(54) + scores.get(49) + scores.get(80)
                + scores.get(74) + scores.get(58) + scores.get(54);
        result.setAbnormalPsychology(abnormalPsychology);
        Integer negativeCognitiveBias = scores.get(64) + scores.get(59) + scores.get(73) + scores.get(83) + scores.get(86);
        result.setNegativeCognitiveBias(negativeCognitiveBias);

        logger.info("result: userId {}, scores {}",request.getUserId(), result);

        scaleRecordMapper.insert(result);
        return result;
    }

    Integer reverseScore(Integer score){
        return 6-score;
    }

    public List<String> analyze(ScaleScore score){
        List<String> result = new ArrayList<String>();
        if(score.getViolence()>30) {
            result.add(evaluationConclusion[0]);
            result.add(precautions[0]);
        }
        if(score.getEmpathy()<14) {
            result.add(evaluationConclusion[1]);
            result.add(precautions[1]);
        }
        if(score.getAlert()>24) {
            result.add(evaluationConclusion[2]);
            result.add(precautions[2]);
        }
        if(score.getLie()>30){
            result.add(evaluationConclusion[3]);
            result.add(precautions[3]);
        }
        if(score.getProsocial()>30) {
            result.add(evaluationConclusion[4]);
            result.add(precautions[4]);
        }
        if(score.getSelfEsteem()>30) {
            result.add(evaluationConclusion[5]);
            result.add(precautions[5]);
        }
        if(score.getSelfControl()<10) {
            result.add(evaluationConclusion[6]);
            result.add(precautions[6]);
        }
        if(score.getValues()>30){
            result.add(evaluationConclusion[7]);
            result.add(precautions[7]);
        }
        if(score.getSocialSupport()>30){
            result.add(evaluationConclusion[8]);
            result.add(precautions[8]);
        }
        if(score.getNonsuicidalSelfInjury()>13){
            result.add(evaluationConclusion[9]);
            result.add(precautions[9]);
        }
        if(score.getSuicidalTendency()>20){
            result.add(evaluationConclusion[10]);
            result.add(precautions[10]);
        }
        if(score.getEmotionRegulation()>30){
            result.add(evaluationConclusion[11]);
            result.add(precautions[11]);
        }
        if(score.getAbnormalPsychology()>30){
            result.add(evaluationConclusion[12]);
            result.add(precautions[12]);
        }
        if(score.getNegativeCognitiveBias()>21){
            result.add(evaluationConclusion[13]);
            result.add(precautions[13]);
        }

        return result;
    }

    @Override
    public List<ScaleScore> selectScaleScore(String userId) {
        return scaleRecordMapper.selectByUserId(userId);
    }
}
